#include "Escenario.h"
#include "Evolucionable.h"
#include <iostream>
#include <list>
#include <math.h>

#define PI 3.14159265

using namespace std;
	

Escenario::Escenario(void)
{
}

bool Escenario::validaValores(int x, int y) {
	if (x > maxX || y > maxY){
		//Lanzar excepcion!
		return false;
	}
	return true;
}

void Escenario::add(Evolucionable* e, int x, int y) {
	lista.push_back(e);
	validaValores(x,y); 
	Posicion *p = new Posicion(x,y);
	posiciones.insert(pair<Evolucionable *,Posicion *>(e,p));
}

map<Evolucionable*, Posicion*> Escenario::getElementosPosicionados() {
	return posiciones;
}

void Escenario::evolucionarPor(int tiempo) {
	for (list<Evolucionable*>::iterator it = lista.begin(); it != lista.end(); it++) {
		(*it)->evolucionarEn(this, tiempo);
	}
}

void Escenario::desplazar(Evolucionable* elemento, int distancia, int angulo) {
	float f = angulo * 1.0;
	float seno = sin(f*PI/180);
	float coseno = cos(f*PI/180);
	int x = (int)(coseno*distancia);
	int y = (int)(seno*distancia);
	posiciones[elemento]->add(x,y);
}

Escenario::~Escenario(void)
{
}
